package com.yc.cloud.admin.service;

import com.yc.cloud.common.orm.CommonPage;
import com.yc.cloud.common.basic.dto.BasePageReqDTO;
import com.yc.cloud.admin.dto.request.HwCameraStorageStrategyCreateReqDTO;
import com.yc.cloud.admin.dto.request.HwCameraStorageStrategyUpdateReqDTO;
import com.yc.cloud.admin.dto.request.StrategyTimeslotBindReqDTO;
import com.yc.cloud.admin.dto.request.StrategyTimeslotUnbindReqDTO;
import com.yc.cloud.admin.vo.HwCameraStorageStrategyVo;
import com.yc.cloud.entity.HwCameraStorageStrategy;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 * 摄像头存储策略主表 服务类
 * </p>
 *
 * @author kinggu
 * @since 2025-09-15
 */
public interface HwCameraStorageStrategyService extends IService<HwCameraStorageStrategy> {

    /**
     * 创建摄像头存储策略主表
     * @param createReqDTO 创建参数
     * @return 创建成功后的VO对象
     */
    HwCameraStorageStrategyVo create(HwCameraStorageStrategyCreateReqDTO createReqDTO);

    /**
     * 更新摄像头存储策略主表
     * @param updateReqDTO 更新参数
     * @return 更新成功后的VO对象
     */
    HwCameraStorageStrategyVo update(HwCameraStorageStrategyUpdateReqDTO updateReqDTO);

    CommonPage<HwCameraStorageStrategyVo> list(BasePageReqDTO pageReqDTO);

    HwCameraStorageStrategyVo getVOById(Long id);

    List<HwCameraStorageStrategyVo> convertToVoList(List<HwCameraStorageStrategy> entityList);

    HwCameraStorageStrategy get(Long id);

    boolean delete(Long id);

    /**
     * 设置全局默认策略
     * @param strategyId 策略ID
     * @return 是否设置成功
     */
    boolean setAsGlobalDefault(Long strategyId);

    /**
     * 获取全局默认策略
     * @return 全局默认策略
     */
    HwCameraStorageStrategy getGlobalDefaultStrategy();

    /**
     * 为摄像头绑定策略
     * @param cameraId 摄像头ID
     * @param strategyId 策略ID
     * @return 是否绑定成功
     */
    boolean bindCameraStrategy(Long cameraId, Long strategyId);

    /**
     * 解除摄像头策略绑定
     * @param cameraId 摄像头ID
     * @return 是否解除成功
     */
    boolean unbindCameraStrategy(Long cameraId);

    /**
     * 获取摄像头绑定的策略
     * @param cameraId 摄像头ID
     * @return 绑定的策略，如果没有绑定返回null
     */
    HwCameraStorageStrategy getCameraBindStrategy(Long cameraId);

    /**
     * 策略绑定时间段
     * @param bindReqDTO 绑定请求参数
     * @return 是否绑定成功
     */
    boolean bindTimeslots(StrategyTimeslotBindReqDTO bindReqDTO);

    /**
     * 解绑策略时间段（支持批量）
     * @param unbindReqDTO 解绑请求参数
     * @return 是否解绑成功
     */
    boolean unbindTimeslots(StrategyTimeslotUnbindReqDTO unbindReqDTO);
} 